#define _CRT_SECURE_NO_WARNINGS 1

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
//
//int n;
//int arr[n];
//
//int main()
//{
//    scanf("%d", &n);
//    arr[1] = arr[2] = 1;
//    for (int i = 3; i <= n; i++)
//    {
//        arr[i] = arr[i - 1] + arr[i - 2];
//    }
//    for (int i = 0; i < n; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//    return 0;
//}

//const int N = 6;
//char g[N][N], backup[N][N];
//
//void turn(int x, int y)
//{
//    int dx[5] = { -1,0,1,0,0 };
//    int dy[5] = { 0,1,0,-1,0 };
//    for (int i = 0; i < 5; i++)
//    {
//        int ax = x + dx[i];
//        int ay = y + dy[i];
//        if (ax >= 5 || ax < 0 || ay >= 5 || ay < 0) continue;
//        g[ax][ay] ^= 1;
//    }
//}
//
//int main()
//{
//    int n;
//    scanf("%d", &n);
//    while (n--)
//    {
//        for (int i = 0; i < 5; i++) cin >> g[i];
//        int ans = 10;
//        for (int i = 0; i < 32; i++)
//        {
//            memcpy(backup, g, sizeof(g));
//            int count = 0;
//            for (int j = 0; j < 5; j++)
//            {
//                if (i >> j & 1)
//                {
//                    count++;
//                    turn(0, j);
//                }
//            }
//            for (int j = 0; j < 4; j++)
//            {
//                for (int z = 0; z < 5; z++)
//                {
//                    if (g[j][z] == '0')
//                    {
//                        count++;
//                        turn(j + 1, z);
//                    }
//                }
//            }
//            bool sign = false;
//            for (int j = 0; j < 5; j++)
//            {
//                if (g[4][j] == '0')
//                {
//                    sign = true;
//                    break;
//                }
//            }
//            if (!sign)
//            {
//                ans = min(ans, count);
//            }
//            memcpy(g, backup, sizeof(g));
//        }
//        if (ans > 6)
//        {
//            ans = -1;
//        }
//        printf("%d\n", ans);
//    }
//    return 0;
//}


//const int N = 26;
//int n, m;
//int sta[N];
//bool used[N];
//
//void dfs(int x)
//{
//    if (x > m)
//    {
//        for (int i = 1; i <= m; i++)
//        {
//            printf("%d ", sta[i]);
//        }
//        printf("\n");
//        return;
//    }
//    for (int i = sta[x - 1] + 1; i <= n; i++)
//    {
//        if (!used[i])
//        {
//            sta[x] = i;
//            used[i] = true;
//            dfs(x + 1);
//            used[i] = false;
//        }
//    }
//}
//
//int main()
//{
//    scanf("%d%d", &n, &m);
//    dfs(1);
//    return 0;
//}


//const int N = 101;
//char str1[N];
//char str2[N];
//
//void turn(int x)
//{
//    if (str2[x] == '*')
//    {
//        str2[x] = 'o';
//    }
//    else if (str2[x] = 'o')
//    {
//        str2[x] = '*';
//    }
//    if (str2[x + 1] == '\0')
//    {
//        return;
//    }
//    if (str2[x + 1] == '*')
//    {
//        str2[x + 1] = 'o';
//    }
//    else if (str2[x + 1] = 'o')
//    {
//        str2[x + 1] = '*';
//    }
//}
//
//int main()
//{
//    scanf("%s%s", str1, str2);
//    int i = 0, j = 0;
//    int count = 0;
//    while (str1[i] != '\0')
//    {
//        if (str1[i] != str2[j])
//        {
//            count++;
//            turn(j);
//        }
//        i++;
//        j++;
//    }
//    printf("%d ", count);
//    return 0;
//}


const int N = 10;
bool sta[N], backup[N];
int n, ans;

bool check(int a, int c)
{
    long long b = n * (long long)c - a * c;
    if (!a || !c || !b) return false;
    memcpy(backup, sta, sizeof(sta));
    while (b)
    {
        int z = b % 10;
        if (!z || backup[z]) return false;
        backup[z] = true;
        b /= 10;
    }
    for (int j = 1; j <= 9; j++)
    {
        if (!backup[j])
        {
            return false;
        }
    }
    return true;
}

void dfs_c(int u, int a, int c)
{
    if (u > 9) return;
    if (check(a, c))
    {
        ans++;
    }
    
    for (int i = 1; i <= 9; i++)
    {
        if (!sta[i])
        {
            sta[i] = true;
            dfs_c(u + 1, a, c * 10 + i);
            sta[i] = false;
        }
    }
}

void dfs_a(int u, int a)
{
    if (a >= n) return;
    if (a) dfs_c(u, a, 0);
    for (int i = 1; i <= 9; i++)
    {
        if (!sta[i])
        {
            sta[i] = true;
            dfs_a(u + 1, a * 10 + i);
            sta[i] = false;
        }
    }
}

int main()
{
    scanf("%d", &n);
    dfs_a(0, 0);
    cout << ans << endl;
    return 0;
}